using System.Collections.Generic;
using System.Linq;
using Blazorise.Docs.Models;

namespace Blazorise.Docs.Services.Search;

public static class ManualPageEntries
{
    public static PageEntry[] Entries =
    [
    new( "docs", "Overview" ),
    new( "docs/start", "Start" ),
    new( "docs/usage", "Usage" ),
    new( "docs/theming", "Theming" ),
    new( "docs/pwa", "PWA" ),
    new( "docs/components/accordion", "Accordion", "Build vertically collapsing accordions in combination with our Collapse component." ),
    new( "docs/components/addon", "Addon", "Easily extend form controls by adding text, or buttons on either side of textual inputs, custom selects, and custom file inputs." ),
    new( "docs/components/alert", "Alert", "Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages." ),
    new( "docs/components/badge", "Badge", "Badges are used to draw attention and display statuses or counts." ),
    new( "docs/components/bar", "Bar", "A responsive navbar that can support images, links, buttons, and dropdowns." ),
    new( "docs/components/breadcrumb", "Breadcrumb", "A simple breadcrumb component to improve your navigation experience." ),
    new( "docs/components/button", "Button", "Use Blazorise custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more." ),
    new( "docs/components/card", "Card", "Blazorise cards provide a flexible and extensible content container with multiple variants and options." ),
    new( "docs/components/carousel", "Carousel", "Loop a series of images or texts in a limited space." ),
    new( "docs/components/check", "Check", "Check allow the user to toggle an option on or off." ),
    new( "docs/components/close-button", "Close Button", "A generic close button for dismissing content like modals and alerts." ),
    new( "docs/components/color-edit", "Color Edit", "The ColorEdit allow the user to select a color." ),
    new( "docs/components/color-picker", "Color Picker", "The ColorPicker allow the user to select a color using a variety of input methods." ),
    new( "docs/components/date-edit", "Date Edit", "DateEdit is an input field that allows the user to enter a date by typing or by selecting from a calendar overlay." ),
    new( "docs/components/date-picker", "Date Picker", "DatePicker is an input field that allows the user to enter a date by typing or by selecting from a calendar overlay." ),
    new( "docs/components/divider", "Divider", "Dividers are used to visually separate or group elements." ),
    new( "docs/components/drag-drop", "Drag & Drop", "Quickly drag and drop elements between the containers." ),
    new( "docs/components/dropdown", "Dropdown", "Dropdowns expose additional content that \"drops down\" in a menu." ),
    new( "docs/components/field", "Field", "A generic container used to properly layout input elements on a form." ),
    new( "docs/components/figure", "Figure", "Documentation and examples for displaying related images and text with the figure component in Blazorise." ),
    new( "docs/components/file-edit", "File Edit", "The FileEdit component is a specialized input that provides a clean interface for selecting files." ),
    new( "docs/components/file-picker", "File Picker", "The FilePicker component provides extra functionality, listing and detailing files, providing clear and upload buttons, and inbuilt progress." ),
    new( "docs/components/focus-trap", "FocusTrap", "Manages focus of the forms and its input elements." ),
    new( "docs/components/grid", "Grid", "A simple way to build responsive columns." ),
    new( "docs/components/highlighter", "Highlighter", "Visually highlight part of the text based on the search term." ),
    new( "docs/components/jumbotron", "Jumbotron", "Lightweight, flexible component for showcasing hero unit style content." ),
    new( "docs/components/layout", "Layout", "Handling the overall layout of a page." ),
    new( "docs/components/link", "Link", "Provides declarative, accessible navigation around your application." ),
    new( "docs/components/list-group", "List Group", "List groups are a flexible and powerful component for displaying a series of content." ),
    new( "docs/components/input-mask", "Input Mask", "Input mask allows the user to input a value in a specific format while typing." ),
    new( "docs/components/memo-edit", "Memo Edit", "MemoEdit collect data from the user and allow multiple lines of text." ),
    new( "docs/components/modal", "Modal", "Dialog is a small window that can be used to present information and user interface elements in an overlay." ),
    new( "docs/components/numeric-edit", "Numeric Edit", "A native numeric <input> component built around the <input type=\"number\">." ),
    new( "docs/components/numeric-picker", "Numeric Picker", "A customizable NumericPicker component allows you to enter numeric values and contains controls for increasing and reducing the value." ),
    new( "docs/components/offcanvas", "Offcanvas", "Offcanvas is a sidebar component that can be toggled to appear from the left, right, top, or bottom edge of the viewport." ),
    new( "docs/components/pagination", "Pagination", "A responsive, usable, and flexible pagination." ),
    new( "docs/components/progress", "Progress", "Progress bars are used to show the status of an ongoing operation." ),
    new( "docs/components/radio", "Radio", "The Radio allow the user to select a single option from a group." ),
    new( "docs/components/rating", "Rating", "Ratings provide insight regarding others opinions and experiences with a product." ),
    new( "docs/components/repeater", "Repeater", "The repeater component is a helper component that repeats the child content for each element in a collection." ),
    new( "docs/components/select", "Select", "Selects allow you to choose one or more items from a dropdown menu." ),
    new( "docs/components/skeleton", "Skeleton", "Skeletons are used to indicate that something is still loading or that the content is not yet available." ),
    new( "docs/components/slider", "Slider", "Sliders allow users to make selections from a range of values." ),
    new( "docs/components/step", "Step", "The Step component displays progress through numbered steps." ),
    new( "docs/components/switch", "Switch", "Switch is used for switching between two opposing states." ),
    new( "docs/components/tab", "Tab", "Tabs are used to organize and group content into sections that the user can navigate between." ),
    new( "docs/components/table", "Table", "Basic table is just for data display." ),
    new( "docs/components/time-edit", "Time Edit", "A native time input component build around the <input type=\"time\">." ),
    new( "docs/components/time-picker", "Time Picker", "A customizable time input component with an option to manually write time or choose from a menu." ),
    new( "docs/components/toast", "Toast", "Toasts are lightweight notifications designed to mimic the push notifications that have been popularized by mobile and desktop operating systems." ),
    new( "docs/components/tooltip", "Tooltip", "Tooltips display additional information based on a specific action." ),
    new( "docs/components/text-edit", "Text Edit", "The TextEdit allows the user to input and edit text." ),
    new( "docs/components/typography", "Typography", "Control text size, alignment, wrapping, overflow, transforms and more." ),
    new( "docs/components/validation", "Validation", "The Validation component allows you to verify your data, helping you find and correct errors." ),

    new( "docs/extensions/animate", "Animate", "" ),
    new( "docs/extensions/autocomplete", "Autocomplete", "The Autocomplete component offers simple and flexible type-ahead functionality." ),
    new( "docs/extensions/captcha", "Captcha", "Learn to use and work with the Blazorise Captcha extension components, which are used to help prevent fake users or malicious software from taking action on your website." ),
    new( "docs/extensions/chart", "Chart", "Simple yet flexible charting for designers & developers." ),
    new( "docs/extensions/chart-datalabels", "Chart DataLabels", "Display labels on data for any type of charts." ),
    new( "docs/extensions/chart-live", "Chart Streaming", "Chart plugin for live streaming data." ),
    new( "docs/extensions/chart-trendline", "Chart Trendline", "This plugin draws an linear trendline in your Chart." ),
    new( "docs/extensions/chart-zoom", "Chart Zoom", "Zoom and pan the chart with the zoom plugin." ),
    new( "docs/extensions/datagrid/aggregates", "DataGrid Aggregates" ),

    new( "docs/extensions/datagrid/getting-started", "DataGrid", "The DataGrid component is used for displaying tabular data. Features include sorting, searching, pagination, content-editing, and row selection." ),

    new( "docs/extensions/datagrid/binding-data", "DataGrid Binding Data" ),
    new( "docs/extensions/datagrid/binding-data/in-memory", "DataGrid Binding Data : In Memory", "The DataGrid can bind to your data in memory, allowing for quick and efficient display of your data sets." ),
    new( "docs/extensions/datagrid/binding-data/large-data", "DataGrid Binding Data : Large Data", "The DataGrid Read Data feature allows you to handle Large Data by providing you with a centralized ReadData Method that allows you to query your data by pages." ),
    new( "docs/extensions/datagrid/binding-data/virtualize", "DataGrid Binding Data : Virtualize", "Optimize performance for large data sets with the Blazorise DataGrid's virtualization feature. By only rendering the data currently visible on the screen, virtualization reduces the amount of DOM elements, resulting in improved performance and load times." ),
    new( "docs/extensions/datagrid/binding-data/observable", "DataGrid Binding Data : Observable Data", "The DataGrid can bind observable data, so whenever the underlying collection is changed the DataGrid is automatically updated." ),
    new( "docs/extensions/datagrid/binding-data/dynamic", "DataGrid Binding Data : Dynamic", "The DataGrid can bind to your dynamic data, allowing for greater flexibility." ),

    new( "docs/extensions/datagrid/columns", "DataGrid Columns", "Learn to use and work with the Blazorise DataGrid Columns to customize and configure the columns in a data grid. Explore various column types, such as text, numeric, date, and boolean, to display and manipulate data effectively. Utilize column-specific features like sorting, filtering, and formatting to enhance the presentation and functionality of your data grid. Gain expertise in creating custom columns to meet specific requirements and provide tailored data visualization options." ),

    new( "docs/extensions/datagrid/features", "DataGrid Features" ),
    new( "docs/extensions/datagrid/features/context-menu", "DataGrid Context Menu", "Right-click on any row to access options such as editing, deleting, and custom actions." ),
    new( "docs/extensions/datagrid/features/editing", "DataGrid Editing", "The DataGrid can perform some basic CRUD operations on the supplied Data collection." ),
    new( "docs/extensions/datagrid/features/filtering", "DataGrid Filtering", "Quickly search and filter by any column, or customize filter options to fit your needs." ),
    new( "docs/extensions/datagrid/features/auto-generate-columns", "DataGrid Auto Generate Columns", "The DataGrid can automatically generate columns based on the TItem type." ),
    new( "docs/extensions/datagrid/features/column-chooser", "DataGrid Column Chooser", "Enable Column Chooser to allow users to show or hide columns in the DataGrid." ),
    new( "docs/extensions/datagrid/features/fixed-columns", "DataGrid Fixed Columns", "The table columns remains visible as you scroll, making it easy to identify and reference the data in your grid." ),
    new( "docs/extensions/datagrid/features/fixed-header", "DataGrid Fixed Header", "The table header remains visible as you scroll, making it easy to identify and reference the data in your grid." ),
    new( "docs/extensions/datagrid/features/grouping", "DataGrid Grouping", "Grouping feature for Blazorise DataGrid allows you to easily group and organize your data by specific columns." ),
    new( "docs/extensions/datagrid/features/paging", "DataGrid Paging", "Paginate your data with customizable page size options and intuitive navigation controls." ),
    new( "docs/extensions/datagrid/features/reordering", "DataGrid Reordering", "Easily adjust the order of your columns with the Blazorise DataGrid's reordering feature. Drag and drop column by moving them with the mouse." ),
    new( "docs/extensions/datagrid/features/resizing", "DataGrid Resizing", "Easily adjust the size of your columns with the Blazorise DataGrid's resizing feature. Drag and drop column edges to resize, or use customized options to fit your needs." ),
    new( "docs/extensions/datagrid/features/sorting", "DataGrid Sorting", "Blazorise DataGrid offers efficient data sorting with customizable options." ),
    new( "docs/extensions/datagrid/features/header-group", "DataGrid Header Group", "Header Group feature for Blazorise DataGrid allows you to easily group a set of defined columns by rendering a top row header which groups the columns by the defined Caption" ),
    new( "docs/extensions/datagrid/features/state-management", "DataGrid State Management", "You are able to manage the state of the DataGrid by using the provided GetState and LoadState methods." ),
    new( "docs/extensions/datagrid/features/mobile-mode", "DataGrid Mobile Mode", "The table will have a dedicated layout for mobile devices where the columns are stacked on top of each other." ),


    new( "docs/extensions/datagrid/selection", "DataGrid Selection" ),
    new( "docs/extensions/datagrid/selection/single", "DataGrid Single Selection", "Easily select and manage a single row of data with the Blazorise DataGrid's single selection feature. Select a row by clicking on it or programmatically, and access the selected data for further use." ),
    new( "docs/extensions/datagrid/selection/multiple", "DataGrid Multiple Selection", "Select and manage multiple rows of data with ease using the Blazorise DataGrid's multiple selection feature. Select rows by clicking on them or programmatically, and access the selected data for further use." ),
    new( "docs/extensions/datagrid/selection/cell", "DataGrid Cell Selection", "Easily select and manage a single cell with the Blazorise DataGrid's cell selection feature." ),
    new( "docs/extensions/datagrid/selection/custom-row-colors", "DataGrid Custom Row Colors", "Easily color code your data with the Blazorise DataGrid's custom row color feature." ),

    new( "docs/extensions/datagrid/templates", "DataGrid Templates" ),
    new( "docs/extensions/datagrid/templates/button-row", "DataGrid Templates : Button Row", "Easily customize the action buttons shown with the Blazorise DataGrid's button row template feature." ),
    new( "docs/extensions/datagrid/templates/commands", "DataGrid Templates : Commands", "Customize your action commands with the Blazorise DataGrid's commands template feature. Assign custom templates to the command column, such as editing and deleting, or add your own custom actions." ),
    new( "docs/extensions/datagrid/templates/detail-row", "DataGrid Templates : Detail Row", "Easily expand and display additional information for each row using the Blazorise DataGrid's detail row template feature." ),
    new( "docs/extensions/datagrid/templates/display", "DataGrid Templates : Display", "Customize how your data is displayed in each cell using the Blazorise DataGrid's display template feature. Assign custom templates to individual columns, allowing for more control over how your data is displayed. " ),
    new( "docs/extensions/datagrid/templates/edit", "DataGrid Templates : Edit", "Assign custom edit templates to individual columns, allowing for more control over how data is edited." ),
    new( "docs/extensions/datagrid/templates/loading", "DataGrid Templates : Loading", "Customize the loading look of the Blazorise DataGrid with the loading template feature." ),
    new( "docs/extensions/datagrid/templates/row-overlay", "DataGrid Templates : Row Overlay", "When enabled, the Row Overlay feature allows you to display supplementary data or contextual information directly on top of specific rows within the DataGrid." ),

    new( "docs/extensions/datagrid/validations", "DataGrid Validations" ),
    new( "docs/extensions/dropdownlist", "DropdownList", "The DropdownList component allows you to select a value from a list of predefined items." ),
    new( "docs/extensions/icons", "Icons", "Icons are symbols that can be used to represent various options within an application." ),
    new( "docs/extensions/icons-available", "Available Icons" ),
    new( "docs/extensions/list-view", "List View", "List views are a flexible and powerful component for displaying a series of content in a contained scrollable view by providing a data source." ),
    new( "docs/extensions/lottie-animation", "Lottie Animation", "The LottieAnimation component is used to embed JSON-based Lottie animations." ),
    new( "docs/extensions/cropper", "Cropper", "A component used to crop images." ),
    new( "docs/extensions/loadingindicator", "LoadingIndicator", "A wrapper component used to add loading indocators UI to other components." ),
    new( "docs/extensions/markdown", "Markdown", "The Markdown component allows you to edit markdown strings." ),
    new( "docs/extensions/pdfviewer", "PdfViewer", "A PdfViewer component used to display a regular PDF document." ),
    new( "docs/extensions/richtextedit", "RichTextEdit", "The RichTextEdit component allows you to add and use a ‘WYSIWYG’ rich text editor." ),
    new( "docs/extensions/routertabs", "RouterTabs", "Learn to use and work with the Blazorise RouterTabs to render a tab for each navigation." ),
    new( "docs/extensions/selectlist", "SelectList", "The SelectList component allows you to select a value from a list of predefined items." ),
    new( "docs/extensions/sidebar", "Sidebar", "The Sidebar component is an expandable and collapsible container area that holds primary and secondary information placed alongside the main content of a webpage." ),
    new( "docs/extensions/snackbar", "Snackbar", "Snackbar provide brief messages about app processes. The component is also known as a toast." ),
    new( "docs/extensions/spinkit", "SpinKit", "A component used to show loading indicators animated with CSS." ),
    new( "docs/extensions/transferlist", "TransferList", "The TransferList component is a versatile control element in Blazor that facilitates transferring items between two lists within applications." ),
    new( "docs/extensions/treeview", "TreeView", "The TreeView component is a graphical control element that presents a hierarchical view of information." ),
    new( "docs/extensions/video", "Video", "A Video component used to play a regular or streaming media." ),
    new( "docs/extensions/qrcode", "QRCode", "A component used to generate QR codes." ),
    new( "docs/extensions/fluent-validation", "FluentValidation", "A validation component for building strongly-typed validation rules." ),

    new( "docs/usage/ant-design", "AntDesign Usage" ),
    new( "docs/usage/bootstrap4", "Bootstrap 4 Usage" ),
    new( "docs/usage/bootstrap5", "Bootstrap 5 Usage" ),
    new( "docs/usage/bulma", "Bulma Usage" ),
    new( "docs/usage/material", "Material Usage" ),
    new( "docs/helpers/colors", "Color Utilities" ),
    new( "docs/helpers/enums/bar", "Enums: Bar" ),
    new( "docs/helpers/enums/button", "Enums: Button" ),
    new( "docs/helpers/enums/chart", "Enums: Button" ),
    new( "docs/helpers/enums/common", "Enums: Common" ),
    new( "docs/helpers/enums/datagrid", "Enums: DataGrid" ),
    new( "docs/helpers/enums/date", "Enums: Date" ),
    new( "docs/helpers/enums/divider", "Enums: Divider" ),
    new( "docs/helpers/enums/dropdown", "Enums: Dropdown" ),
    new( "docs/helpers/enums/heading", "Enums: Heading" ),
    new( "docs/helpers/enums/icon", "Enums: Icon" ),
    new( "docs/helpers/enums/listgroup", "Enums: ListGroup" ),
    new( "docs/helpers/enums/snackbar", "Enums: Snackbar" ),
    new( "docs/helpers/enums/spinkit", "Enums: SpinKit" ),
    new( "docs/helpers/enums/table", "Enums: Table" ),
    new( "docs/helpers/enums/tabs", "Enums: Tabs" ),
    new( "docs/helpers/enums/text", "Enums: Text" ),
    new( "docs/helpers/enums/tooltip", "Enums: Tooltip" ),
    new( "docs/helpers/enums/validation", "Enums: Validation" ),
    new( "docs/helpers/localization", "Localization" ),
    new( "docs/helpers/sizes", "Sizes" ),
    new( "docs/helpers/utilities/object-fit", "Object Fit", "Use the object fit utilities to modify how the content of a replaced element, such as an <img> or <video>, should be resized to fit its container." ),
    new( "docs/helpers/utilities/position", "Position" ),
    new( "docs/helpers/utilities", "Utilities" ),

    new( "docs/services/message-provider", "Message Provider", "Message service is used for quick user confirmation actions." ),
    new( "docs/services/modal-provider", "Modal Provider", "Programatically instantiate modals with custom content." ),
    new( "docs/services/offcanvas-provider", "Offcanvas Provider", "Programatically instantiate offcanvases with custom content." ),
    new( "docs/services/notification-provider", "Notification Provider", "Notification service is used to provide feedback to the user." ),
    new( "docs/services/page-progress-provider", "Page Progress Provider", "Page Progress service is used to provide a page loading indicator to the user." ),
    new( "docs/services/toast-provider", "Toast Provider", "Programatically instantiate toasts with custom messages." ),
    new( "docs/faq", "FAQ" ),
    new( "license", "License" )
    ];

    public static IEnumerable<PageEntry> WithDescriptionAndUrl( string urlToStartWith )
        => Entries.Where( x => x.Url.StartsWith( urlToStartWith ) && !string.IsNullOrEmpty( x.Description ) );
}
